package com.gsbelarus.gedemin.lib.sync.protocol.etc;

import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

import com.gsbelarus.gedemin.lib.sync.protocol.DataBaseModel;
import com.gsbelarus.gedemin.lib.sync.protocol.table.ParsTable;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;

/**
 * Класс, содержащий методы для обновления БД.
 * А так же методы для работы с GUID
 */
final public class Updater {

    /**
     * Метод для обновления БД
     *
     * @param parsTables массив команд и значений для обновления
     * @param model      объект класса для работы с БД
     * @throws IOException
     */
    public static void update(List<ParsTable> parsTables, DataBaseModel model) throws IOException {
        for (ParsTable p : parsTables) {
            switch (p.getCommand()) {
                case Parser.INSERT:
                    model.insert(p);
                    break;
                case Parser.UPDATE:
                    model.update(p);
                    break;
                case Parser.RESET:
                    model.resetTable(p);
                    break;
                case Parser.DELETE:
                    model.delete(p);
                    break;
                case Parser.RALL:
                    model.recreateDataBase();
                    break;
                case Parser.VER:
                    Updater.updateVer(p, model);
                    Updater.updateDateSync(model);
                    break;
            }
        }
    }

    /**
     * Обновляет версию данных
     *
     * @param p        объект содержащий номер версии
     * @param dbHelper объект класса для работы с БД
     */
    private static void updateVer(ParsTable p, DataBaseModel dbHelper) {
        p.setTable(DataBaseModel.TABLE_SYNC_NAME);
        ContentValues cv = new ContentValues();
        String ver = p.getValues()[0];
        cv.put(DataBaseModel.UID, 0);
        cv.put(DataBaseModel.VER, ver);
        p.setContentValues(cv);
        dbHelper.update(p);
    }

    /**
     * Обновить дату и время успешной синхронизации
     *
     * @param dbHelper объект класса для работы с БД
     */
    public static void updateDateSync(DataBaseModel dbHelper) {
        ParsTable parsTable = new ParsTable();
        parsTable.setTable(DataBaseModel.TABLE_SYNC_NAME);
        ContentValues cv = new ContentValues();
        cv.put(DataBaseModel.UID, 0);
        cv.put(DataBaseModel.VERSYNC, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis()));
        parsTable.setContentValues(cv);
        dbHelper.update(parsTable);
    }

    /**
     * Обновить GUID
     *
     * @param context контекст приложения
     * @param guid    строка GUID
     */
    public static void putGUID(Context context, String guid) {
        SharedPreferences prefs;
        SharedPreferences.Editor editor;

        prefs = PreferenceManager.getDefaultSharedPreferences(context);
        editor = prefs.edit();

        editor.putString("GUID", guid);
        editor.commit();
    }

    /**
     * Получить GUID
     *
     * @param context контекст приложения
     * @return строка GUID
     */
    public static String getGUID(Context context) {
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        return preferences.getString("GUID", null);
    }
}
